/*
* Tiled Map Editor, (c) 2004-2006
*
* This program is free software; you can redistribute it and/or modify it under
* the terms of the GNU General Public License as published by the Free Software
* Foundation; either version 2 of the License, or (at your option) any later
* version.
*
* Adam Turk <aturk@biggeruniverse.com> Bjorn Lindeijer <bjorn@lindeijer.nl>
*/
package de.yaams.extensions.basemap.tiled.mapeditor.dialogs;
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Properties;
import javax.swing.BorderFactory;
import javax.swing.Box;
import javax.swing.BoxLayout;
import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.TableCellEditor;
import de.yaams.extensions.basemap.tiled.mapeditor.Resources;
import de.yaams.extensions.basemap.tiled.mapeditor.util.PropertiesTableModel;
import de.yaams.extensions.basemap.tiled.mapeditor.widget.VerticalStaticJPanel;
/**
* @version $Id$
*/
public class PropertiesDialog extends JDialog {
/**
*
*/
private static final long serialVersionUID = 7921127728498077643L;
protected JTable propertiesTable;
protected final Properties properties;
protected final PropertiesTableModel tableModel = new PropertiesTableModel();
protected JPanel mainPanel;
private static final String DIALOG_TITLE = Resources.getString("dialog.properties.title");
private static final String OK_BUTTON = Resources.getString("general.button.ok");
private static final String DELETE_BUTTON = Resources.getString("general.button.delete");
private static final String CANCEL_BUTTON = Resources.getString("general.button.cancel");
public PropertiesDialog(JFrame parent, Properties p) {
super(parent, DIALOG_TITLE, true);
properties = p;
init();
pack();
setLocationRelativeTo(getOwner());
}
protected void init() {
propertiesTable = new JTable(tableModel);
JScrollPane propScrollPane = new JScrollPane(propertiesTable);
propScrollPane.setPreferredSize(new Dimension(200, 150));
JButton okButton = new JButton(OK_BUTTON);
JButton cancelButton = new JButton(CANCEL_BUTTON);
JButton deleteButton = new JButton(Resources.getIcon("gnome-delete.png"));
deleteButton.setToolTipText(DELETE_BUTTON);
JPanel user = new VerticalStaticJPanel();
user.setBorder(BorderFactory.createEmptyBorder(5, 0, 0, 0));
user.setLayout(new BoxLayout(user, BoxLayout.X_AXIS));
user.add(Box.createGlue());
user.add(Box.createRigidArea(new Dimension(5, 0)));
user.add(deleteButton);
JPanel buttons = new VerticalStaticJPanel();
buttons.setBorder(BorderFactory.createEmptyBorder(5, 0, 0, 0));
buttons.setLayout(new BoxLayout(buttons, BoxLayout.X_AXIS));
buttons.add(Box.createGlue());
buttons.add(okButton);
buttons.add(Box.createRigidArea(new Dimension(5, 0)));
buttons.add(cancelButton);
mainPanel = new JPanel();
mainPanel.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));
mainPanel.setLayout(new BoxLayout(mainPanel, BoxLayout.Y_AXIS));
mainPanel.add(propScrollPane);
mainPanel.add(user);
mainPanel.add(buttons);
getContentPane().add(mainPanel);
getRootPane().setDefaultButton(okButton);
// create actionlisteners
okButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent actionEvent) {
buildPropertiesAndDispose();
}
});
cancelButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent actionEvent) {
dispose();
}
});
deleteButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent actionEvent) {
deleteSelected();
}
});
}
public void updateInfo() {
tableModel.setProperties(properties);
}
public void getProps() {
updateInfo();
setVisible(true);
}
protected void buildPropertiesAndDispose() {
// Make sure there is no active cell editor anymore
TableCellEditor editor = propertiesTable.getCellEditor();
if (editor != null) {
editor.stopCellEditing();
}
// Apply possibly changed properties.
properties.clear();
properties.putAll(tableModel.getProperties());
dispose();
}
protected void deleteSelected() {
int total = propertiesTable.getSelectedRowCount();
Object[] keys = new Object[total];
int[] selRows = propertiesTable.getSelectedRows();
for (int i = 0; i < total; i++) {
keys[i] = propertiesTable.getValueAt(selRows[i], 0);
}
for (int i = 0; i < total; i++) {
if (keys[i] != null) {
tableModel.remove(keys[i]);
}
}
}
}